using B.S.XZYData.ErrorCode;
using MediatR;
using System.Collections.Generic;

namespace B.S.XZYData.Api.Wrter.Application.Command.Plan
{
    /// <summary>
    /// 保存生产计划命令（主表+子表一起保存）
    /// </summary>
    public class SavePlanCommand : IRequest<ApiResult<int>>
    {
        /// <summary>
        /// 生产计划ID（0表示新增，>0表示编辑）
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 计划单号
        /// </summary>
        public string Code { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string? Remark { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string OperateBy { get; set; }

        /// <summary>
        /// 关联到计划的产品列表
        /// </summary>
        public List<SavePlanProductCommand> Products { get; set; } = new List<SavePlanProductCommand>();
    }

    /// <summary>
    /// 保存生产计划关联产品命令
    /// </summary>
    public class SavePlanProductCommand
    {
        /// <summary>
        /// 产品ID（0表示新增产品，>0表示更新现有产品）
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 所属计划ID（用于设置产品的PlanId字段）
        /// </summary>
        public int PlanId { get; set; }

        /// <summary>
        /// 产品编号
        /// </summary>
        public string ProductCode { get; set; }

        /// <summary>
        /// 产品名称
        /// </summary>
        public string ProductName { get; set; }

        /// <summary>
        /// 产品规格
        /// </summary>
        public string? Spec { get; set; }

        /// <summary>
        /// 产品单位
        /// </summary>
        public string? Unit { get; set; }

        /// <summary>
        /// 生产人员
        /// </summary>
        public string? Producer { get; set; }

        /// <summary>
        /// 生产开始时间
        /// </summary>
        public DateTime ProductionStartTime { get; set; } = DateTime.Now;

        /// <summary>
        /// 生产结束时间
        /// </summary>
        public DateTime ProductionEndTime { get; set; } = DateTime.Now.AddDays(1);

        /// <summary>
        /// 是否从计划中移除该产品（解除关联）
        /// </summary>
        public bool IsRemoved { get; set; }
    }
} 